Some current cloud computing environments provide an architecture in which infrastructure, platforms, and software are provided as services. In this context, infrastructure often refers to computing, communication and storage resources. The term platform includes enabling resources, that themselves include operating systems and application development as well as deployment services. Software as a service extends service oriented architectures from fine grained operations to richer applications. In general, one common trait among cloud layers is that they provide utility computing. That is, resources are made available and scaled on demand, allowing a pay-per-use billing model.
One mechanism that many cloud computing architectures use to employ scalability enables scaling out, whereby multiple instances of a service, each running on its own virtual machine, process client requests. In some particular connectionless scenarios, affinity between a specific client and a specific server instance for the duration of the session (referred to as session affinity) is not guaranteed.
One reason that the cloud computing architecture does not always guarantee session affinity (such as in connectionless scenarios) is that it can generate new service instances, when required to service a given workload in a load balanced fashion. It can also remove service instances when the number of service instances can be reduced given the current workload. Therefore, when the client is interacting with one service instance, and it is taken away and the client requests are forwarded to another service instance, the new service instance has no idea of the session state. A similar problem surfaces when requests from a given client are spread across multiple servers for the purpose of load balancing.
This lack of session affinity and session migration can present a problem in attempting to deploy certain applications or services to a cloud environment. In particular, where a hosted application or service is a stateful service, lack of session affinity can be problematic. By way of one specific example, assume that a client is interacting with a flight reservation service, in order to book a flight reservation on an airline. This particular task requires several interactions between the client and the service. Those tasks might include identifying a destination city, an origination city, an airline, a flight time, etc. In this type of stateful application, either the client application on the client's machine, or the service instance which the client is interacting with, must remember who the client is, the state of the application and the state of the session. Application state refers to data maintained by the application for the application. Some such data includes configuration settings, policies, etc. Application state is normally disassociated from all entities, and has a lone binding to the application itself and is thus maintained on the server side. Session state is the state of a particular client/server interaction (or session). Session state can refer to the state of the service (i.e., the state of server objects) and/or the state of the client (i.e., the state of client objects). Session state can be persisted as current values or as a history of modifications to relevant objects. In any case, the session state can be stored either at the client, at the server that is providing the service, or distributed among the two.
Because the cloud computing architecture does not ensure session affinity and/or session migration of a given session between a client and a given service instance, it can be difficult to migrate stateful applications to a cloud computing architecture. Some have attempted to address this problem by substantially rewriting applications or services to make them stateless. That is, the applications or services are rewritten so that the clients maintain state so the server instance need not maintain state. However, this often requires a great deal of development and time, and is inefficient and error prone.
The discussion above is merely provided for general background information and is not intended to be used as an aid in determining the scope of the claimed subject matter.